package com.hongpu.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hongpu.domain.SysMenu;
import com.hongpu.domain.SysUser;
import com.hongpu.dto.ResetPasswordDto;
import com.hongpu.dto.SysUserDetailDto;
import com.hongpu.dto.TenantAdminDto;
import com.hongpu.utils.ResultDto;
import com.hongpu.vo.SysMenuVo;
import com.hongpu.vo.SysRoleVo;
import com.hongpu.vo.TenantAdminVo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
* @author Michael zhang
* @description 针对表【sys_user(系统用户表)】的数据库操作Service
* @createDate 2025-05-13 14:15:24
*/
public interface SysUserService extends IService<SysUser> {
    /**
     * 忽略租户id的前提下，超级管理员新增用户，新增的用户所属租户ID需要前端传递
     */
    public ResultDto ignoreTenantIdAndAddTenantAdmin(SysUser sysUser);
    /**
     * 忽略租户id的前提下，查询用户信息
     */
    public String ignoreTenantIdAndGetSysUserByUserId(Long userId);
    /**
     * 忽略租户id的前提下，删除租户信息
     */
    public boolean ignoreTenantIdAndDeleteSysUserByUserId(Long userId);
    /**
     * 忽略租户id的前提下，启用租户信息
     */
    public boolean ignoreTenantIdAndActiveSysUserByUserId(Long userId);

    /**
     * 忽略租户id的前提下，查询租户信息
     */
    public TenantAdminVo ignoreTenantIdAndDetailSysUserByUserId(Long userId);

    /**
     * 忽略租户id的前提下，查询租户分页
     */
    public IPage<TenantAdminVo> ignoreTenantIdAndPageTenantAdmin(TenantAdminDto tenantAdminDto);
    /**
     * 忽略租户id的前提下，修改租户管理员信息
     */
    public boolean ignoreTenantIdAndUpdateTenantAdmin(TenantAdminDto tenantAdminDto);
    /**
     * 忽略租户id的前提下，修改租户管理员密码
     */
    public boolean ignoreTenantIdAndUpdateTenantAdminPassword(TenantAdminDto tenantAdminDto);

    /**
     * 忽略租户id的前提下，根据传递的租户ID将租户ID下所有用户 deleted 字段设置为1。适用场景：租户停用或暂停状态下，该租户下所有用户不能登录
     */
    public boolean ignoreTenantIdAndUpdateStatusDeleted(Long tenantId);

    /**
     * 忽略租户id的前提下，根据传递的租户ID将该租户ID下所有用户 deleted 字段设置为0。适用场景：租户启用下状态，该租户下所有用户都可以登录
     */
    public boolean ignoreTenantIdAndUpdateStatusActive(Long tenantId);



    /**
     * 租户管理员添加普通用户
     * @param sysUser
     * @return
     */
    public ResultDto add(SysUser sysUser);
    /**
     * 租户的管理员删除普通用户
     */
    public ResultDto deleteUserById(Long id);
    /**
     * 租户的管理员启用普通用户
     */
    public ResultDto activeById(Long id);

    /**
     * 租户管理员查询普通用户分页
     */
    public ResultDto page(SysUserDetailDto sysUserDetailDto);



    /**
     * 根据用户名查询用户信息:账号密码登录
     * @param username
     * @return
     */
    public SysUser getSysUserByUseraccount(String account);

    /**
     * 根据用户名查询用户ID
     * @param username
     */
    public Long getUserIdByUserAccount(String account);

    /**
     * 根据用户ID查询角色ID
     * @param userId
     */
    public List<SysRoleVo> getRoleIdsByUserId(Long userId);

    /**
     * 根据角色ID查询权限ID
     * @param roleIds
     */
    public List<SysMenuVo> getSysMenusByRoleId(List<SysRoleVo> roleIds);

    /**
     * 登录成功后，进入首页，前端获取用户信息
     */
    public ResultDto  getUserInfo();

    /**
     * 租户管理员重置用户密码
     */
    public ResultDto resetPassword(ResetPasswordDto resetPasswordDto);

    /**
     * 租户管理员根据用户ID修改用户详情
     */
    public ResultDto update( SysUserDetailDto sysUserDetailDto);

    /**
     * 租户管理员根据用户ID查询用户详情
     */
    public ResultDto detail( Long id);

    /**
     * 超级管理员在租户下新增租户管理员时，根据选择的租户ID查询该租户下是否有管理员用户
     */
    public ResultDto getTenantAdminByTenantId( Long tenantId);
}
